package com.hjj.services;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hjj.entity.Product;
import com.hjj.mapper.ProductMapper;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;

import java.math.BigDecimal;
import java.util.List;
import java.util.concurrent.TimeUnit;

// 暴露服务给注册中心
@DubboService
public class ProductServiceImpl implements ProductService{
    @Autowired
    private ProductMapper productMapper;

    @Autowired
    RedisTemplate redisTemplate;


    /**
     *  BigDecimal 转换为 String
     *      错误转法：强制类型转换，BigDecimal不能使用强制类型转换为String类型的数据
     *      正确转法：使用toString方法进行转换
     *
     *  String 转换为 BigDecimal
     *      错误转法：强制类型转换，String不能使用强制类型转换为BigDecimal类型
     *      正确转发：使用new BigDecimal(String类型的数据)进行转换
     * @return
     */
    @Override
    public BigDecimal getAvgRate() {
        String str = (String) redisTemplate.boundValueOps("product:rate").get();
        BigDecimal rate;
        if (str == null){
            QueryWrapper<Product> wrapper = new QueryWrapper<>();
            wrapper.select("avg(rate)");
            List<Object> objects = productMapper.selectObjs(wrapper);
            rate = (BigDecimal) objects.get(0);
            redisTemplate.boundValueOps("product:rate").set(rate.toString(), 50, TimeUnit.SECONDS);
        }else {
            rate = new BigDecimal(str);
        }
        return rate;
    }
}
